package com.example.feignserver.config;

import feign.Logger;
import feign.Request;
import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

/**
 * Feign配置重试机制和超时等
 *
 * Request.Options 第一个参数建立socket超时时间 第二个读取响应socket超时时间
 *
 * Retryer 第一个参数period是请求重试的间隔算法参数，第二个参数maxPeriod 是请求间隔最大时间，第三个参数是重试的次数
 * @author zhanghaidong
 * @version v1.0
 * @description
 * @date 2019/5/24
 */
@Configuration
public class FeignConfig {

    @Bean
    public Request.Options options(){
        return new Request.Options(12000,12000);
    }

    @Bean
    public Retryer retryer(){
        return new Retryer.Default(100, TimeUnit.SECONDS.toMillis(1L), 5);
    }

    /**
     *
     * 配合 logging.level.com.example.feignserver.service.EurekaClientService=DEBUG 一起使用
     * @return
     */
    @Bean
    public Logger.Level feignLogLevel() {
        return Logger.Level.FULL;
    }
}
